$Description$
给出一个$n\times n$的矩阵,每一格有一个非负整数$a_{i,j},(a_i,j\leqslant 1000)$现在从$(1,1)$出发,可以往右或者往下走,最后到达$(n,n),$每达到一格,把该格子的数取出来,该格子的数就变成$0$,这样一共走$K$次,现在要求$K$次所达到的方格的数的和最大
$Solution$
源点$s$和汇点$t$分别连向$(1,1),(n,n),$容量为$k$,费用为$0$,仅表示一共可以走k次;
对于方格中的每个点i,进行拆点,分别为$i_{1}~$和$i_{2}$。$i_1~$和$i_{2}~$之间连两条边,一条容量为$1$,费用为$a_{i,j}$,表示每个点的数只可以取一次;另一条容量为$\infty$,费用为$0$,仅表示可以经过无数次;
对于在其下方或右边点的点,连一条容量为$\infty$,费用为$0$的边
最后跑最大费用最大流即可
$Code$
1 |
|